今天要來實作的是使用者註冊的功能,開始嘍~
記得啟動虛擬環境!
在設計 model 時,我們已經為 user 增加一些驗證機制,像 email 跟 password 為必填項目,在index.html
中也有新增註冊表格與 http post method,為了實現註冊功能,接下來要做的事情為將使用者請求的資料對應到 model 欄位中,並直接登入。到 core/views.py 把原本的 index 函式修改成這樣:
from django.shortcuts import render, redirect
from django.contrib.auth import get_user_model
from django.http import HttpResponse
def signup(request):
if request.method == 'POST':
email = request.POST['email']
name = request.POST['username']
password = request.POST['password']
user = get_user_model().objects.create_user(email=email, password=password, name=name)
# 新增使用者後直接登入
user = authenticate(request, username=username, password=password)
login(request, user)
return HttpResponse('Sigup and login Success')
return render(request, 'core/index.html')
HttpResponse 是暫時用來測試請求是否成功,之後會替換掉,也可以傳送後進入管理者頁面去檢查新增的使用者的 email, name,別忘記 url 也要修改:
# 其他程式碼
urlpatterns = [
path('', views.signup, name='signup'),
]
因為index.html
中還有個登入按鈕在等待我們實作登入功能。在 core/views.py 加入以下程式碼:
def login_view(request):
if request.method == 'POST':
email = request.POST['email']
password = request.POST['password']
user = authenticate(request, email=email, password=password)
# 若使用者已經存在
if user is not None:
login(request, user)
return HttpResponse('Login Success')
else:
return render(request, 'core/index.html')
此段程式碼跟註冊有點類似,差異在會檢查使用者是否已經存在,若不存在則會返回首頁,表示登入失敗,若驗證資訊都正確,則會顯示登入成功訊息。這邊的訊息也是暫時的,之後會再重構。完成 view 後,接著到 core/urls.py,新增 url,對應到剛剛新增的 view:
# 其他程式碼
urlpatterns = [
# 其他程式碼
path('login/', views.login_view, name='login'),
]
最後,到 core/templates/index.html 中修改登入按鈕:
<!-- 其他 HTML -->
<button type="submit" formaction="{% url 'core:login' %}"
class="w-full bg-gray-600 text-white py-2 px-4 rounded-md hover:bg-gray-700">
Log In
</button>
<!-- 其他 HTML -->
{% url 'core:login' %}"
為另一種模板標籤(template tag),此用法會尋找 urls.py 中名為 login 的 url,前面的 core 為 urls.py 中定義的 app_name。都完成後便大功告成!!大家可以測試看看。
完成了註冊及登入功能,接下來會進行登入後頁面的設計。大家明天見~